//
// Created by LiuYou on 2021/10/28.
//

#include <iostream>
#include <fcntl.h>
#include <unistd.h>


static int fd1;
static int fd2;


// 这个函数有必要进行一次重构, 这样就能返回任意行首到文件开始处的字节数。见下一个版本。
[[deprecated("需要进行重构。")]]
static off_t calculatePos11(int fd) {
    // 11 需要10个\n。
    char buf[1]{};
    int lineCount{};
    while (true) {

        read( fd, buf, 1 );
        if (buf[0] == '\n') {
            ++lineCount;
            if (lineCount == 10) {
                break;
            }
        }


    }

    off_t offset = lseek( fd, 0, SEEK_CUR );
    return offset;
}


int main(int argc, char** argv) {
    if (argc < 2) {
        fprintf( stderr, "用法: %s filename\n", argv[0] );
    }

    fd1 = open( argv[1], O_RDONLY );
    if (fd1 < 0) {
        perror( "open()" );
        return 1;
    }
    atexit( [] {
        close( fd1 );
    } );

    fd2 = open( argv[1], O_WRONLY );
    if (fd2 < 0) {
        perror( "open()" );
        return 1;
    }
    atexit( [] {
        close( fd2 );
    } );



    // fd1 -> 11
    // fd2 -> 10

    off_t offset = calculatePos11( fd1 );
    lseek( fd1, offset, SEEK_SET );


    return 0;
}
